//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Persiana.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
Persiana::Persiana(float longi, float anch, float altura, int numLaminas){
        largo=longi;
        ancho=anch;
        alto=altura;
        alturaActual=alto;
        cuantasLaminas=numLaminas;
        anguloLaminas=0;

        separacionLaminas=alto/cuantasLaminas-grosorLaminas;
        anchoLaminas=ancho/2;
        float parteSuperiorAlaminas=largo/8;
        float largoLaminas=largo-2*parteSuperiorAlaminas;

        Tablero * parteSuperior=new Tablero(largo, ancho, 4, largo, ancho, 4);
        parteSuperior->setColor(0.5,1.0,0.0);
        anadeParte(parteSuperior);


        cuerda1=new Cilindro(0.1,0.1,alto,5,5);
        cuerda1->setColor(0.5,1.0,0.0);
        cuerda1->traslada(parteSuperiorAlaminas+largoLaminas/6, 0,ancho/2+grosorLaminas/2);
        anadeParte(cuerda1);
        cuerda1->rota(90,1,0,0);

        cuerda2=new Cilindro(0.1,0.1,alto,5,5);
        cuerda2->setColor(0.5,1.0,0.0);
        cuerda2->traslada(largo-(parteSuperiorAlaminas+largoLaminas/6), 0,ancho/2+grosorLaminas/2);
        anadeParte(cuerda2);
        cuerda2->rota(90,1,0,0);

        Cilindro * tirador=new Cilindro(0.5,0.5,alto,5,5);
        tirador->setColor(0.5,1.0,0.0);
        tirador->traslada(largo-parteSuperiorAlaminas/2, 0,ancho/2+grosorLaminas/2);
        anadeParte(tirador);
        tirador->rota(90,1,0,0);

        for(int i=0;i<cuantasLaminas;i++){
                Tablero * lamina=new Tablero(largoLaminas,anchoLaminas , grosorLaminas, largo, 5, 3);
                lamina->setColor(0.5,1.0,0.0);
                anadeParte(lamina);
                lamina->traslada(parteSuperiorAlaminas,-i*separacionLaminas,ancho/2-anchoLaminas/2);

        } 
}

void Persiana::cambiarAltura(float nuevaAltura){
        alturaActual=nuevaAltura;
        cuerda1->setAlto(alturaActual);
        cuerda2->setAlto(alturaActual);
        float separacionLaminas=alturaActual/cuantasLaminas-grosorLaminas;
        float parteSuperiorAlaminas=largo/8;
        partes->getPos(4);
        for(int i=0;i<cuantasLaminas;i++){
                Tablero *lamina=(Tablero*)partes->getActual()->getValor();//partes[i+4];
                lamina->getMatriz()->cargarIdentidad();
                lamina->traslada(parteSuperiorAlaminas,-i*separacionLaminas,ancho/2-anchoLaminas/2);
                lamina->rota(anguloLaminas,1,0,0);
                partes->avanza();
        }
}

void Persiana::subirPersiana(){
        if(alturaActual>=0.3*cuantasLaminas+grosorLaminas*cuantasLaminas)
                cambiarAltura(alturaActual-0.3*cuantasLaminas);

}


void Persiana::bajarPersiana(){
        if(alturaActual<=alto-0.3*cuantasLaminas-grosorLaminas*cuantasLaminas)
                cambiarAltura(alturaActual+0.3*cuantasLaminas);
}

void Persiana::abrirPersiana(){
        if(anguloLaminas+anguloCierrePersiana<90)
                rotaLaminas(anguloCierrePersiana);
}

void Persiana::cerrarPersiana(){
        if(anguloLaminas-anguloCierrePersiana>-90)
                rotaLaminas(-anguloCierrePersiana);
}

void Persiana::rotaLaminas(float angulo){
        anguloLaminas+=angulo;
        partes->inicia();
        for(int i=0;i<4;i++) partes->avanza();
        for(int i=0;i<cuantasLaminas;i++){
                Tablero *lamina=(Tablero*)partes->getActual()->getValor();
                lamina->rota(angulo,1,0,0);
                partes->avanza();
        }
}
